package br.com.arg.aplica.util;
/**
 * Verifica se o CPF está correto, fazendo a verificação dos dígitos. </br>
 * algoritmo http://www.geradorcpf.com/algoritmo_do_cpf.htm
 */
public class CPF {
	private static String calculaDigitos(String strcpf) {
		String num = strcpf.replaceAll("\\D", "");

		Integer primDig, segDig;
		int soma = 0, peso = 10;
		for (int i = 0; i < num.length(); i++)
			soma += Integer.parseInt(num.substring(i, i + 1)) * peso--;

		if (soma % 11 == 0 | soma % 11 == 1)
			primDig = new Integer(0);
		else
			primDig = new Integer(11 - (soma % 11));

		soma = 0;
		peso = 11;
		for (int i = 0; i < num.length(); i++)
			soma += Integer.parseInt(num.substring(i, i + 1)) * peso--;

		soma += primDig.intValue() * 2;
		if (soma % 11 == 0 | soma % 11 == 1)
			segDig = new Integer(0);
		else
			segDig = new Integer(11 - (soma % 11));

		return primDig.toString() + segDig.toString();
	}

	public static String geraAleatorio() {
		String iniciais = "";
		Integer numero;
		for (int i = 0; i < 9; i++) {
			numero = new Integer((int) (Math.random() * 10));
			iniciais += numero.toString();
		}
		return iniciais + calculaDigitos(iniciais);
	}

	public static boolean valida(String strcpf) {
		String cpf = strcpf.replaceAll("\\D", "");

		if (cpf.length() > 11)
			return false;
		else if (cpf.length() < 11) {
			String base = "00000000000";
			cpf = base.substring(0, 11 - cpf.length()) + cpf;
		}

		if (cpf.equals("00000000000") || cpf.equals("11111111111")
				|| cpf.equals("22222222222") || cpf.equals("33333333333")
				|| cpf.equals("44444444444") || cpf.equals("55555555555")
				|| cpf.equals("66666666666") || cpf.equals("77777777777")
				|| cpf.equals("88888888888") || cpf.equals("99999999999")
				|| (cpf.length() != 11))
			return (false);

		String numDig = cpf.substring(0, 9);
		return calculaDigitos(numDig).equals(cpf.substring(9, 11));
	}

}
